use std::char;

const A: [char; 6] = ['a', 'b', 'c', 'd', 'e', 'f'];

fn convert2decimal(s: &str, radix: u32) -> u32 {
    let mut result = 0u32;
    let mut m_base = 1;
    s.chars().rev().for_each(|c| {
        result += c.to_digit(radix).unwrap() * m_base;
        m_base *= radix;
    });
    result
}

fn decimal2str(decimal: u32, base: u32) -> String {
    let mut s = String::new();
    let mut k = decimal;
    while k > 0 {
        let c = k % base;
        if c >= 10 {
            s = A[c as usize - 10].to_string() + &s;
        } else {
            s = c.to_string() + &s;
        }
        k /= base;
    }
    s
}

///题⽬2：实现⼀个算法，⽀持任意2-16进制数之间转换，如：2进制转7进制，7进制转16进制，15进制转8进制等。(20)
/// 输⼊: 9(10), 8 #输⼊两个参数：10进制的9(字符串)，转换⽬标进制8(数字)，输出：11
/// #返回结果，8进制的11(字符串)输⼊: 1111(2), 15 #输⼊2进制的1111，转换为15进制
/// 输出：10(15)
/// #返回结果，15进制的10(字符串)
pub fn convert_base(num_str: &str, to_base: u32) -> String {
    let left_bracket = num_str.find('(').unwrap();
    let from_base: u32 = num_str[left_bracket + 1..num_str.len() - 1]
        .parse()
        .unwrap();
    let decimal = convert2decimal(&num_str[0..left_bracket], from_base);
    // println!("decimal: {}", decimal);
    decimal2str(decimal, to_base)
}
